﻿using System;

namespace _011_整数运算溢出检查运算符
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 1000000;
            int b = 1000000;
            int c = checked(a * b); // 只检测这个表达式

            checked // 检测语句块中所有的表达式
            {
                c = a * b;
            }


            int x = int.MaxValue;
            int y = unchecked(x + 1);
            unchecked { int z = x + 1; }

            // 常量表达式的溢出检查
            int xx = int.MaxValue + 1; // 编译时错误
            int yy = unchecked(int.MaxValue + 1); // 没有错误


            // 8位和16位整数，这些类型缺少它们自己的算术运算符
            short xxx = 1, yyy = 1;
            short zzz = xxx + yyy; // 编译时错误
            short zzzz = (short)(xxx + yyy);

            // 特殊的float和double值
            Console.WriteLine(double.NegativeInfinity); // 负无穷大

            //非零值除以零的结果是无穷大。
            Console.WriteLine(1.0/0.0); // 正无穷大
            Console.WriteLine(-1.0/0.0); // 负无穷大
            Console.WriteLine(1.0/0.0); // 正无穷大
            Console.WriteLine(-1.0/-0.0); // 负无穷大
            //零除以零或无穷大减去无穷大的结果是NaN。
            Console.WriteLine(0.0/0.0); // NaN
            Console.WriteLine((1.0/0.0)-(1.0/0.0)); // NaN

            Console.ReadKey();
        }
    }
}